/**
 * 
 */
package ve.com.neometrica.inventario.web.bean;

import java.util.LinkedList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import org.apache.log4j.Logger;

import ve.com.neometrica.inventario.api.model.Marca;
import ve.com.neometrica.inventario.api.model.Producto;

/**
 * @author a.cabrera
 *
 */
@ManagedBean(name="productoBean")
@RequestScoped
public class ProductoBean extends AdministrarBean {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1310417865435225344L;

	private static final Logger log = Logger.getLogger(ProductoBean.class);
	
	private Producto producto;
	private List<Marca> marcas;
	private List<SelectItem> marcasSelect;
	private List<SelectItem> tipoSelect;
	private String marcaseleccionadaId;
	private String tiposeleccionadaId;
	private Boolean error;

	public ProductoBean() {
	
	}
	
    @Override
    protected void init() {
    	this.producto=new Producto();
    	this.marcas=this.getMarcaService().getAll();
    	procesarListas();
    }
    
    private void procesarListas(){
    	if(marcasSelect==null){
    		this.marcasSelect=new LinkedList<SelectItem>();
    	}
    	for (Marca m : marcas) {
			SelectItem s=new SelectItem(m.getId(), m.getNombre());
			marcasSelect.add(s);
		}
    	if(tipoSelect==null){
    		this.tipoSelect=new LinkedList<SelectItem>();    		
    	}
    	this.tipoSelect.add(new SelectItem(1,"Comestible"));
    	this.tipoSelect.add(new SelectItem(2,"No comestible"));
    }
    public void save(ActionEvent actionEvent){
    	log.info(marcaseleccionadaId);    	
    	log.info(producto.getNombre());
    	if(validarDatos()){
    		for (Marca m : marcas) {
				if(m.getId().equals(Integer.valueOf(marcaseleccionadaId))){
					producto.setMarca(m);
				}
			}
    		producto.setTipo(Integer.valueOf(tiposeleccionadaId));
    		//debo guardar el producto
    		this.getProductoService().save(producto);
    		generarOk("productosaveok");
    		getSessionBean().setMostrarMensajeOk(Boolean.TRUE);    		

    		producto=new Producto();
    		marcaseleccionadaId="";
    		tiposeleccionadaId="";
    	}else{
    		//error
    		getSessionBean().setMostrarMensajeError(Boolean.TRUE);    		
    	}
    }
    
    private boolean validarDatos(){
    	Boolean existeError=Boolean.FALSE;
    	existeError=marcaseleccionadaId.equals("-1")?generarError("errormarcaseleccion"):existeError;
    	existeError=tiposeleccionadaId.equals("-1")?generarError("errortiposeleccion"):existeError;
    	return !existeError;
    }

	public List<Marca> getMarcas() {
		return marcas;
	}

	public void setMarcas(List<Marca> marcas) {
		this.marcas = marcas;
	}

	public List<SelectItem> getMarcasSelect() {
		return marcasSelect;
	}

	public void setMarcasSelect(List<SelectItem> marcasSelect) {
		this.marcasSelect = marcasSelect;
	}
    
	public Producto getProducto() {
		return producto;
	}

	public void setProducto(Producto producto) {
		this.producto = producto;
	}

	public String getMarcaseleccionadaId() {
		return marcaseleccionadaId;
	}

	public void setMarcaseleccionadaId(String marcaseleccionadaId) {
		this.marcaseleccionadaId = marcaseleccionadaId;
	}

	public List<SelectItem> getTipoSelect() {
		return tipoSelect;
	}

	public void setTipoSelect(List<SelectItem> tipoSelect) {
		this.tipoSelect = tipoSelect;
	}

	public String getTiposeleccionadaId() {
		return tiposeleccionadaId;
	}

	public void setTiposeleccionadaId(String tiposeleccionadaId) {
		this.tiposeleccionadaId = tiposeleccionadaId;
	}

	public Boolean getError() {
		return error;
	}

	public void setError(Boolean error) {
		this.error = error;
	}
	
}
